import axios from 'axios'
import type { InternalAxiosRequestConfig, AxiosResponse } from 'axios'

const baseURL = '/api'
const instance = axios.create({ baseURL })

import { useTokenStore } from '../stores/token.ts'
import { useMerchantStore } from '../stores/merchant.ts'
// 请求拦截器
instance.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    //请求前回调
    //添加token
    const tokenStore = useTokenStore();
    const merchantStore = useMerchantStore();
    
    // 判断是否是商家相关接口
    if (config.url && config.url.startsWith('/merchant')) {
      // 商家接口使用商家token
      if (merchantStore.merchantToken) {
        config.headers.Authorization = merchantStore.merchantToken
      }
    } else {
      // 其他接口使用用户token
      if (tokenStore.token) {
        config.headers.Authorization = tokenStore.token
      }
    }
    return config
  },
  //请求错误回调
  (error: any) => {
    alert('请求异常')
    return Promise.reject(error)
  }
)

import { ElMessage } from 'element-plus'
// import { useRouter } from 'vue-router'
// const router=useRouter()
import router from '../router'
// 响应拦截器
instance.interceptors.response.use(
  (response: AxiosResponse): any => {
    return response.data
  },
  (error: any) => {
    //判断响应状态码，若为401，则证明未登录，提示请登录，并跳转到登录页面

    if (error.response) {
      if (error.response.status === 401) {
        // 对所有401错误，只显示"请先登录"的提示
        ElMessage.error('请先登录')
        // 判断是商家接口还是用户接口
        const current = router.currentRoute.value
        const isMerchantApi = error.config?.url?.startsWith('/merchant')
        
        if (isMerchantApi) {
          // 商家接口401，跳转到商家登录页
          if (current.path !== '/merchant/auth') {
            router.push('/merchant/auth')
          }
        } else {
          // 用户接口401，跳转到用户登录页
          if (current.path !== '/login') {
            router.push('/login')
          }
        }
        return Promise.reject(error)
      } else if (error.response.status === 429) {
        // 429状态码表示请求过于频繁，特殊处理
        // 这里不显示错误消息，让具体的业务逻辑处理
        return Promise.reject(error)
      } else {
        ElMessage.error('服务器异常')
      }
    } else {
      console.log('error:',error);
      
      ElMessage.error('网络异常，请检查网络连接')
    }
    //返回错误信息
    return Promise.reject(error)
  }
)

export default instance